/*
 * 一个支持流式读取的buffer，用于存储邮件正文、附件、内联附件等的内容
 * 默认实现是使用内存，对于大文件，会有内存占用问题。
 * 一般的实现是一个文件，但是也可以是一个数据库表，这个需要根据具体的情况来实现
 * 通过MailEngine的bufferCreator参数，可以使用自定义的IBuffer对象
 * 支持一边读取一边写入，支持随机读取
 */
export interface IBuffer {
  feed(data: string | Uint8Array): Promise<void>;

  end(data?: string | Uint8Array): Promise<void>;

  [Symbol.asyncIterator](): AsyncIterableIterator<string>;

  read(): AsyncIterableIterator<string>;

  readAll(): Promise<string>;

  getSize(): Promise<number>;

  readRaw(): AsyncIterableIterator<Uint8Array>;

  readAllRaw(): Promise<Uint8Array>;

  getSizeRaw(): Promise<number>;
}